package com.decent.manager.system.controller;

import com.decent.common.bo.SimpleMessage;
import com.decent.common.enums.ErrorCodeEnum;
import com.decent.common.exception.ErrorCodeException;
import com.decent.common.validator.operate.Add;
import com.decent.common.validator.operate.Update;
import com.decent.manager.system.dto.SystemUserDTO;
import com.decent.manager.system.service.SystemUserService;
import com.decent.manager.system.vo.SystemUserVO;
import com.github.pagehelper.PageInfo;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.util.Objects;

/**
 * 员工管理
 *
 * @className: SystemUserController
 * @author: wangyan
 * @date: 2022/4/16
 **/
@RequestMapping("systemUser")
@RestController
public class SystemUserController {
    @Resource
    private SystemUserService systemUserService;

    /**
     * 分页查询员工列表
     *
     * @param pageNumber  当前页数
     * @param pageSize    每页条数
     * @param userAccount 登录账号
     * @param userName    姓名
     * @param mobile      手机号
     * @return page
     */
    @SuppressWarnings("JavadocReference")
    @RequestMapping("queryPage")
    public PageInfo<SystemUserVO> queryPage(SystemUserDTO user) {
        user.initPage();
        return systemUserService.queryPage(user);
    }

    /**
     * 创建员工
     *
     * @param userAccount 登录账号
     * @param userName    姓名
     * @param mobile      手机号
     * @param roleId      角色id
     * @return 新员工登录信息
     */
    @SuppressWarnings("JavadocReference")
    @RequestMapping("createUser")
    public SystemUserVO createUser(@Validated(Add.class) SystemUserDTO user, BindingResult result) {
        if (result.hasErrors()) {
            throw new ErrorCodeException(ErrorCodeEnum.INVALID_PARAMS, result.getAllErrors().get(0).toString());
        }
        return systemUserService.createUser(user);
    }

    /**
     * 修改员工
     *
     * @param userName 姓名
     * @param mobile   手机号
     * @param roleId   角色id
     * @return 修改结果
     */
    @SuppressWarnings("JavadocReference")
    @RequestMapping("updateUser")
    public SimpleMessage updateUser(@Validated(Update.class) SystemUserVO user, BindingResult result) {
        if (result.hasErrors()) {
            throw new ErrorCodeException(ErrorCodeEnum.INVALID_PARAMS, result.getAllErrors().get(0).toString());
        }
        return systemUserService.updateUser(user);
    }

    /**
     * 重置密码
     *
     * @param user 用户信息
     * @return 修改结果
     */
    @RequestMapping("resetPassword")
    public SystemUserVO resetPassword(SystemUserVO user) {
        if (Objects.isNull(user.getUserAccount())) {
            throw new ErrorCodeException(ErrorCodeEnum.INVALID_PARAMS);
        }
        return systemUserService.resetPassword(user);
    }

    /**
     * 修改密码
     *
     * @param user 用户信息
     * @return 修改结果
     */
    @RequestMapping("updatePassword")
    public SimpleMessage updatePassword(SystemUserVO user) {
        if (Objects.isNull(user.getLoginPassword())) {
            throw new ErrorCodeException(ErrorCodeEnum.INVALID_PARAMS);
        }
        return systemUserService.updatePassword(user);
    }
}
